import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa un tronco en movimiento sobre el que el jugador puede desplazarse.
 * 
 * @author (Alcantar Noyola Christian Andres) 
 * @author (Sanchez Ovalle Daniel) 
 * @version (29/04/13)
 */
public class Tronco extends Obstaculo
{

    private String direccion;
    private GreenfootImage imageobst;

    /**
     * El constructor Obstaculo recibe un parametro
     * @param unaDireccion es un parametro que contiene el sentido en que se va a mover el obst. (der o izq)
     * @param nombreimagen es un parametro que contiene el nombre de la imagen que se desea colocar
     * @param numImagen es un parametro que contiene un entero(0 indica que la imagen es un tronco 1=tabla)
     */ 
    public Tronco(String unaDireccion,String nombreimagen,int numImagen)
    {
        super();

        direccion=unaDireccion;
        imageobst=(new GreenfootImage(nombreimagen+".png"));
        if(numImagen==0)
            imageobst.scale(50,20); 

        super.setImage(imageobst);
    }

    /**
     * Este metodo activa constantemente los diferentes metodos de la clase Tronco
     */
    public void act() 
    {
        this.mover();
        super.buscaChango();
        this.changoArriba();
        this.posicionChango();
    }    

    /**
     * Este metodo es para mover el obstaculo, cuando el obstaculo llega a su limite de moverse sobre el escenario
     * se cambia de direccion y viceversa, y si el chango se encuentra sobre el obstaculo lo mueve con el.
     */
    public void mover()
    {
        GreenfootImage imagen=this.getImage();
        Obstaculo obst=(Obstaculo)super.getOneIntersectingObject(Obstaculo.class);
        if(direccion=="derecha")
        {
            if(super.getJugador()!=null)
                super.getJugador().move(1);
            this.move(1);

        }

        if(direccion=="izquierda")
        {

            if(super.getJugador()!=null)
                super.getJugador().move(-1);
            this.move(-1);
        }

        if(obst!=null)
        {

            if(direccion=="derecha")
            {
                this.move(-8);
                if(super.getJugador()!=null )
                    super.getJugador().move(-8);
                direccion="izquierda";
                if(obst instanceof Tronco)
                {
                    Tronco tronc=(Tronco)obst;
                    tronc.cambiaDireccion("derecha");
                }
            }
            else
            {
                this.move(8);
                if(super.getJugador()!=null )
                    super.getJugador().move(8);
                direccion="derecha";
                if(obst instanceof Tronco)
                {
                    Tronco tronc=(Tronco)obst;
                    tronc.cambiaDireccion("izquierda");
                }
            }
        }

        if((super.getX()+(imagen.getWidth()/2))>699)
            direccion="izquierda";

        if((super.getX()-(imagen.getWidth()/2))<1)
            direccion="derecha";
    }

    /**
     * Este metodo checa si el chango esta arriba del obstaculo
     */
    private void changoArriba()
    {
        GreenfootImage imagen=this.getImage();
        if(super.getJugador()!=null)
        {
            super.getJugador().cambiaBanderaCaer(false);
        }
    }

    /**
     * Este metodo cambia la posicion en la que se encontraba el chango, y activa o desactiva la bandera caer
     */
    public void posicionChango()
    {
        GreenfootImage imagen=this.getImage();

        if(super.getJugador()!=null)
        {
            GreenfootImage imgChango=super.getJugador().getImage();

            if((super.getJugador().getX()>this.getX()+(imagen.getWidth()/2) || super.getJugador().getX()<this.getX()-(imagen.getWidth()/2)))
                super.getJugador().cambiaBanderaCaer(true);
            else
            {
                if(super.getJugador().getY()>=this.getY() && super.getJugador().getCaer()==false)
                    super.getJugador().setLocation(super.getJugador().getX(),(this.getY()-(imagen.getHeight()/2)+2-(imgChango.getHeight()/2)));
                super.getJugador().cambiaBanderaCaer(false);
            }      
        }
    }

    /**
     * Este metodo cambia la direccion del obstaculo
     * @param unaDireccion contiene un String con la direccion del obstaculo(derecha o izquierda)
     */        
    public void cambiaDireccion(String unaDireccion)
    {
        direccion=unaDireccion;
    }

}

